【新機能】Amazon CloudWatch LogsのログデータをAWS Lambdaでリアルタイムに処理する
こんにちは、せーのです。今日はCloudWatch Logsのログをより扱いやすくするための新機能をご紹介します。
より手軽になりました
CloudWatch Logsのデータをリアルタイムに処理する方法は基本的には一緒で、フィルタパターンを作成し、CloudWatch Logsに適応させ、ログの中にフィルタパターンに一致する文字列がヒットしたら後続の処理を行う、というものです。 今までは
- CloudWatchのアラーム
- Amazon Kinesis
などを後ろにつけることができました。今日の新機能であらたにここにLambdaが利用できるようになりました!ログ処理でkinesisを持ち出すのはちょっと、という場合などに手軽に使えるLambdaは便利ですね。
やってみた
それでは早速やってみましょう。マネージメントコンソールからLambdaを開き、ファンクションの新規作成を選びます。
Blueprintの中にCloudWatchLogsと連携するサンプルがあるのでこちらを使います。 選択すると対象となるCloudWatch Logsのロググループとフィルタパターンを入力する画面が表示されます。
今回はVPC FlowLogのデータから特定のEC2にアクセスされた時のデータをLambdaで拾ってみたいと思います。対象のEC2のIPをフィルタパターンにセットします。
サンプルのコードを見てみると、CloudWatch Logsのデータをgunzipで展開してjsonをパースしているようですね。今回はこのまま使います。 他のAWSリソースは今回は使いませんのでRoleはBasicなものを新規に作ります。
出来上がったのがこちらです。すぐに適用させる場合は[Enable Event Source]を[Enable now]に選択して下さい。
それでは試してみます。対象となるEC2にSSHアクセスします。
ssh ec2-user@54.92.3.207 -i ~/dev/key/cm_ cm_experimentation.pem cm_winkey cm_us_east1.pem cm_winkey_private.ppk Tsuyoshis-iMac:~ Tsuyoshi$ ssh ec2-user@54.92.3.207 -i ~/dev/key/cm_experimentation.pem Warning: Permanently added '54.92.3.207' (RSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/ [ec2-user@ip-10-0-1-142 ~]$
CloudWatchのログを見てみて、Lambdaが反応したログが出力されていれば成功です。
反応していますね。成功です。
まとめ
いかがでしたでしょうか。とても簡単に連携することができました。 ログの警告データを元にセキュリティグループを変更する等色々なアイデアでお使いになってみてください。